const loginQueue = [];
let isLoginning = false;

function requstAjax(options = {}){
	const {
		success,
		fail
	} = options;
	
	return new Promise((res, rej) => {
	  wx.request(Object.assign(
		{},
		options,
		{
		  success(r) {
			const isSuccess = isHttpSuccess(r.statusCode);
			if (isSuccess) {  // 成功的请求状态
			  res(r.data);
			} else {
			  rej({
				msg: '网络错误:${r.statusCode}',
				detail: r
			  });
			}
		  },
		  fail: rej,
		},
	  ));
	});
}


/**
 * 判断请求状态是否成功
 * 参数：http状态码
 * 返回值：[Boolen]
 */
function isHttpSuccess(status) {
  return status >= 200 && status < 300 || status === 304;
}


/**
 * 获取sessionId
 * 参数：undefined
 * 返回值：[promise]sessionId
 */
function getSessionId() {
  return new Promise((res, rej) => {
    // 本地sessionId缺失，重新登录
    if (!sessionId) {
      loginQueue.push({ res, rej });
      if (!isLoginning) {
        isLoginning = true;
        login()
          .then((r1) => {
            isLoginning = false;
            while (loginQueue.length) {
              loginQueue.shift().res(r1);
            }
          })
          .catch((err) => {
            isLoginning = false;
            while (loginQueue.length) {
              loginQueue.shift().rej(r1);
            }
          });
      }
    } else {
      res(sessionId);
    }
  });
}

/**
 * ajax高级封装
 * 参数：[Object]option = {}，参考wx.request；
 * [Boolen]keepLogin = false
 * 返回值：[promise]res
 */
function request(options = {}, keepLogin = true) {
  if (keepLogin) {
    return new Promise((res, rej) => {
      getSessionId()
        .then((r1) => {
          // 获取sessionId成功之后，发起请求
          requestAjax(options)
            .then((r2) => {
              if (r2.rcode === 401) {
                // 登录状态无效，则重新走一遍登录流程
                // 销毁本地已失效的sessionId
                sessionId = '';
                getSessionId()
                  .then((r3) => {
                    requestP(options)
                      .then(res)
                      .catch(rej);
                  });
              } else {
                res(r2);
              }
            })
            .catch(rej);
        })
        .catch(rej);
    });
  } else {
    // 不需要sessionId，直接发起请求
    return requestAjax(options);
  }
}

const websiteUrl = 'http://192.168.0.61:8080'; 

const req = {
	getOpenid(data){
		const url = '${websiteUrl}/api/v1/user/userOpenId'
		return request({url,data});
	},
	getBanner(data){
		const url = '${websiteUrl}/api/v1/banner/getBanner'
		return request({url,data});
	}
}

